The present invention relates generally to object-based high level programming environments, and more particularly, to techniques for invoking native methods in Java computing environments.
Recently, the Java programming environment has become quite popular. The Java programming language is a language that is designed to be portable enough to be executed on a wide range of computers ranging from small devices (e.g., pagers, cell phones and smart cards) up to supercomputers. Computer programs written in the Java programming language (and other languages) may be compiled into Java Bytecode instructions that are suitable for execution by a Java virtual machine implementation.
The Java virtual machine is commonly implemented in software by means of an interpreter for the Java virtual machine instruction set but, in general, may be software, hardware, or both. A particular Java virtual machine implementation and corresponding support libraries together constitute a Java runtime environment.
Computer programs in the Java programming language are arranged in one or more classes or interfaces (referred to herein jointly as classes or class files). Such programs are generally platform, i.e., hardware and operating system, independent. As such, these computer programs may be executed without modification on any computer that is able to run an implementation of the Java runtime environment.
Object-oriented classes written in the Java programming language are compiled to a particular binary format called the “class file format.” The class file includes various components associated with a single class. These components can be, for example, methods and/or interfaces associated with the class. In addition, the class file format can include a significant amount of ancillary information that is associated with the class. The class file format (as well as the general operation of the Java virtual machine) is described in some detail in The Java Virtual Machine Specification, Second Edition, by Tim Lindholm and Frank Yellin, which is hereby incorporated herein by reference. A virtual machine operating in a Java computing environment allows for execution of native methods (functions or procedures) written in platform specific programming languages (native languages). In other words, the Java programming language allows invocation of native methods written in other programming languages (e.g., C, C++, etc.). This means that the processing of the native method is performed by a section of code written in the native programming language. Accordingly, there is a need to convert the parameters (e.g., Java primitive data types, Java reference objects) from Java programming language to parameters suitable for the native language.
To achieve this, recently, Java Native Interface (JNI) has been developed as an interface between the Java program and the native methods written in programming languages other than Java (e.g., C, C++, etc.). Using Java Native Interface (JNI), native methods are provided a reference (environment parameter). More particularly, every invocation of a native method passes a reference to a table of functions that are used to facilitate the conversion of parameters from Java to the native language. Thus, the Java Native Interface UNI) does not give direct access to Java parameters (e.g., Java primitive data types, Java reference objects). Instead, these parameters are accessed and indirectly through various Java Native Interface (JNI) methods which perform the conversation. More details about the Java Native Interface (JNI) are provided in Core Java 2. Volume II—Advanced Features, by Cay S. Horstmann and Gary Cornell, which is incorporated by reference herein for all purposes.
Although the Java Native Interface (JNI) provides a useful tool for invocation of native programs in Java computing environments, there is a significant cost associated with using the Java Native Interface (JNI). In other words, there is a significant amount of memory and runtime overhead associated with the use of the methods of the Java Native Interface (JNI). As a result, using the Java Native Interface UNI) can have adverse effects on the performance of virtual machines, especially those operating with relatively less memory and/or computing power (e.g., embedded systems).
In view of the foregoing, there is a need for alternative techniques for invocation of native methods in Java computing environments.